package mil.nga.giat.mage.tests; import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.MediumTest; import android.view.View; import android.widget.LinearLayout; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; import mil.nga.giat.mage.form.LayoutBaker; import mil.nga.giat.mage.observation.ObservationViewActivity; import mil.nga.giat.mage.sdk.datastore.observation.Observation; import mil.nga.giat.mage.sdk.datastore.observation.ObservationProperty; import mil.nga.giat.mage.sdk.utils.DateFormatFactory; /** * * Unit test that tests the {@link mil.nga.giat.mage.form.LayoutBaker} * * @author wiedemanns */ public class LayoutBakerTest extends ActivityInstrumentationTestCase2<ObservationViewActivity> { private static final String LOG_NAME = LayoutBakerTest.class.getName(); ObservationViewActivity activity; public LayoutBakerTest() { super(ObservationViewActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); activity = getActivity(); } @MediumTest public void testDynamicLayoutMapping() { String form = "{\n" + " \"variantField\": null,\n" + " \"fields\": [\n" + " {\n" + " \"id\": 1,\n" + " \"title\": \"Date\",\n" + " \"type\": \"date\",\n" + " \"required\": true,\n" + " \"name\": \"timestamp\",\n" + " \"choices\": []\n" + " },\n" + " {\n" + " \"id\": 2,\n" + " \"title\": \"Location\",\n" + " \"type\": \"geometry\",\n" + " \"required\": true,\n" + " \"name\": \"geometry\",\n" + " \"choices\": []\n" + " },\n" + " {\n" + " \"id\": 3,\n" + " \"title\": \"Type\",\n" + " \"type\": \"dropdown\",\n" + " \"required\": true,\n" + " \"name\": \"type\",\n" + " \"choices\": [\n" + " {\n" + " \"id\": 0,\n" + " \"title\": \"awesome\",\n" + " \"value\": 0\n" + " }\n" + " ]\n" + " }\n" + " ]\n" + " }"; JsonObject dynamicFormJson = new JsonParser().parse(form).getAsJsonObject(); List<View> controls = LayoutBaker.createControlsFromJson(activity, LayoutBaker.ControlGenerationType.VIEW, dynamicFormJson); Collection<ObservationProperty> properties = new ArrayList<ObservationProperty>(); properties.add(new ObservationProperty("type", "awesome")); properties.add(new ObservationProperty("timestamp", DateFormatFactory.ISO8601().format(new Date()))); Observation o = new Observation(null, properties, null, null, null); final Map<String, ObservationProperty> propertiesMapBefore = o.getPropertiesMap(); LinearLayout ll = new LinearLayout(activity); // add dynamic controls to view LayoutBaker.populateLayoutWithControls(ll, controls); // check two way mapping LayoutBaker.populateLayoutFromMap(ll, LayoutBaker.ControlGenerationType.VIEW, propertiesMapBefore); final Map<String, ObservationProperty> propertiesMapAfter = LayoutBaker.populateMapFromLayout(ll); for(String key : propertiesMapBefore.keySet()) { Serializable before = propertiesMapBefore.get(key).getValue(); Serializable after = propertiesMapAfter.get(key).getValue(); assertEquals(before, after); } } }